

#ifndef WIDGET_FUNCC_SMART_HOME_H
#define WIDGET_FUNCC_SMART_HOME_H

#include <QWidget>
#include "button_home_Start.h"
#include <QDebug>
#include <QString>
#include <QIcon>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QUrl>
#include <QUrlQuery>
#include <QJsonDocument>
#include <QJsonObject>
#include <QMessageBox>
#include <QFile>
#include <QTextStream>
#include <QJsonArray>
#include <QList>
#include <cstdio>
#include <QRandomGenerator>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QMovie>
#include <QTimer>
#include <QVideoWidget>
#include <QTcpSocket>
#include <QHostAddress>
#include "button_home_miusic.h"
#include "dialog_home_find.h"
#include "musicprogressbar.h"
#include "tcp_client.h"
namespace Ui {
class Widget_funcC_Smart_Home;
}

class Widget_funcC_Smart_Home : public QWidget
{
    Q_OBJECT
    
public:
    explicit Widget_funcC_Smart_Home(QWidget *parent = nullptr);
    ~Widget_funcC_Smart_Home();
    
    
private:
    QNetworkAccessManager * network_manager; // 歌曲网络管理对象
    QNetworkAccessManager * lyric_network_manager; // 歌词网络管理对象
    QNetworkAccessManager * search_network_manager; // 搜索网络管理对象
    Tcp_client client; // Tcp客户端对象
    QMovie *music_gif; // 音乐动图对象
    QMovie *home_gif; // 家动图对象 
    MusicProgressBar * progressBar; // 音乐进度条对象
    dialog_home_find find_miusic_dialog; // 音乐弹窗对象
    QMediaPlayer *player; // 媒体播放器
    QMediaPlaylist playlist; // 播放列表
    QUrl song_url; // 当前歌曲JSON数据入口
    QUrl play_song_url; // 播放当前歌曲的入口
    QUrl lyric_url; // 当前歌曲歌词JSON数据入口
    QString song_id; // 当前歌曲的id
    QString song_name; // 当前歌曲的歌名
    QString singer_name; // 当歌手的名字
    QStringList song_information; // 当前歌单的综合信息：格式为(id&歌名&歌手名字)
    QList<int> last_index_song; // 用于存储所有按下上一首歌的序号
    int cur_index_song = 0; // 用于存储当前歌的序号
    QString cur_lyric; // 由于存放当前歌曲的歌词数据
    QStringList cur_posi_lyric_list; // 记录每句歌词和其对应的进度: 格式为(进度&歌词)
    QStringList cur_posi_list; // 记录每句歌词对应的进度
    QStringList cur_lyric_list; // 记录每句歌词
    qint64 cur_position = 0; // 记录当前的歌曲的播放进度
protected slots:
    void slots_button_start(bool start);
    void slots_button_send_message();
private:
    void connect_tcp_serve(void); // 连接服务端
    void get_joson(void); // 获取JSON数据
    void get_lyric_joson(void); // 获取歌词JSON数据
    void get_search_json(void); // 获取搜索JSON数据
    void set_url(QUrl url); // 设置当前入口
    void analysis_joson(void); // 解析JSON数据
    void analysis_lyric_joson(void); // 解析歌词JSON数据
    void analysis_search_joson(void); // 解析搜索JSON数据
    void show_json(void); // 将JSON数据显示在QT界面上
    void init_module(void); // 初始化组件
    void init_music_bar(void); // 初始化音乐进度条
    void random_play(void); // 随机播放歌单里的一首歌
    void index_play(void); // 用于设置顺序播放
    void stop_play(void); // 用于停止播放
    void begin_play(void); // 用于开始播放
    void set_playlist(void); // 设置当前的播放列表
    void nextSong(void); // 用于切歌
    void lastSong(void); // 用于切歌
    void initGif(void); // 初始化动图
    void send_message(QString message); // 向服务端发送信息
    QStringList analysis_song_information(int index); // 用于返回歌曲的相关信息列表
private:
    Ui::Widget_funcC_Smart_Home *ui;
private slots:
    void onReplied(QNetworkReply * reply);
    void lyric_onReplied(QNetworkReply * reply);
    void seach_onReplied(QNetworkReply * reply);
    void onPositionChanged(void); // 进度槽函数
    void onMediaStatusChanged(QMediaPlayer::MediaStatus status); // 播放完自动切歌槽函数
};

#endif // WIDGET_FUNCC_SMART_HOME_H
